package com.jprocms.module.cms.dal.dataobject.content;

import com.baomidou.mybatisplus.annotation.*;
import com.jpro.framework.common.util.json.JsonUtils;
import com.jpro.framework.mybatis.core.dataobject.DelBaseDO;
import com.jprocms.module.cms.controller.admin.content.vo.ContentFileVo;
import com.jprocms.module.cms.controller.admin.content.vo.ContentImageVo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.ObjectUtils;

import javax.validation.constraints.NotNull;
import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 * 内容扩展 DO
 *
 * @author jprocms
 */
@TableName("cms_content_ext")
@KeySequence("cms_content_ext_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ContentExtDO extends DelBaseDO {

    /**
     * ID
     */
    @TableId
    private Long id;
    /**
     * 预约发布时间
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private Date onlineTime;
    /**
     * 下线时间
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private Date offlineTime;
    /**
     * 置顶开始时间
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private Date topStartTime;
    /**
     * 置顶结束时间
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private Date topEndTime;
    /**
     * 副标题
     */
    private String subtitle;
    /**
     * 外部链接地址
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String outLink;
    /**
     * 是否新窗口打开
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private Boolean targetBlank;

    public Boolean getTargetBlank() {
        //如果没有配置是否新窗口打开则默认新窗口打开
        if (ObjectUtils.isEmpty(targetBlank)) {
            return true;
        }
        return targetBlank;
    }

    /**
     * seo关键词
     */
    private String keywords;
    /**
     * 摘要
     */
    private String description;
    /**
     * 作者
     */
    private String author;
    /**
     * 来源
     */
    private String source;
    /**
     * 系统图片
     */
    private String sysImage;
    /**
     * 系统视频
     */
    private String sysVideo;
    /**
     * 视频时长
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private Integer sysVideoDuration;
    /**
     * 系统音频
     */
    private String sysAudio;
    /**
     * 系统附件
     */
    private String sysAttach;
    /**
     * 系统附件名称
     */
    private String sysAttachName;
    /**
     * 系统附件大小
     */
    private Long sysAttachFileSize;

    /**
     * 文库
     */
    private String docPdf;
    /**
     * 文库原始文档
     */
    private String originDoc;

    /**
     * 文库文档名称
     */
    private String docName;
    /**
     * pc模板
     */
    private String pcTpl;
    /**
     * h5模板
     */
    private String h5Tpl;
    /**
     * 流程实例ID
     */
    private String processInstanceId;
    /**
     * 退回原因
     */
    private String rejectReason;
    /**
     * 系统默认正文
     */
    private String text;
    /**
     * 多图
     */
    private String imagesJson;
    /**
     * 附件
     */
    private String attachsJson;
    /**
     * PC静态页文件
     */
    private String staticFile;
    /**
     * 手机端静态页文件
     */
    private String h5StaticFile;

    //取值用的list 集合，存数据库用String 对应字段 imagesJson
    @TableField(exist = false)
    private List<ContentImageVo> images = Collections.emptyList();
    @TableField(exist = false)
    private List<ContentFileVo> attachs = Collections.emptyList();

    /**
     * 编辑器类型(1:wangeditor富文本编辑器,2:tinymce编辑器)
     */
    @NotNull
    @Schema(description = "编辑器类型(1:wangeditor富文本编辑器,2:tinymce编辑器)")
    private Integer editorType = 1;

    @Schema(description = "搜索权重")
    private Integer searchWeight = 0;

    /**
     * 解析vo 从字符串中解析转换对象
     *
     * @return
     */
    public List<ContentImageVo> getImages() {
        if (StringUtils.isBlank(getImagesJson())) {
            return images;
        }
        return JsonUtils.parseArray(getImagesJson(), ContentImageVo.class);
    }

    /**
     * 解析vo 从字符串中解析转换对象
     *
     * @return
     */
    public List<ContentFileVo> getAttachs() {
        if (StringUtils.isBlank(getAttachsJson())) {
            return attachs;
        }
        return JsonUtils.parseArray(getAttachsJson(), ContentFileVo.class);
    }

    public void init() {
        if (getTargetBlank() == null) {
            setTargetBlank(false);
        }
    }

}
